package com.nifostasky.comic.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nifostasky.comic.dtos.ForgetPasswordDTO;
import com.nifostasky.comic.dtos.RegisterDTO;
import com.nifostasky.comic.entitys.SysUser;
import com.nifostasky.comic.dtos.UserLoginDTO;
import com.nifostasky.comic.query.SysUserQuery;
import com.nifostasky.comic.utils.PageUtils;
import com.nifostasky.comic.vos.JsonResult;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 *
 */
public interface SysUserService extends IService<SysUser> {
    IPage<SysUser> findListPage(PageUtils pageUtils, SysUserQuery userQuery);

    /**
     * 获取验证码
     * @param request
     * @return
     */
    JsonResult getVerifyCode(HttpServletRequest request);

    /**
     * 登录接口
     * @param userLoginDTO 用户接收Dto
     * @return JsonResult 用户信息和token
     * @author wanzl
     */
    JsonResult userLogin(UserLoginDTO userLoginDTO, HttpServletRequest request);

    /**
     * 登录退出
     * @return
     */
    JsonResult loginOut();

    /**
     * 设置角色
     * @param userId 用户id
     * @param roleIds 角色id
     */
    Boolean setRole(Long userId,String roleIds);

    Boolean saveOrUpdateUser(SysUser sysUser);

    /**
     * 根据用户名获取用户信息
     * @param userName 用户名
     */
    SysUser getUserByUserName(String userName);

    /**
     * 验证用户名是否存在
     * @param userName
     * @return
     */
    Boolean hasExistUserName(String userName);

    /**
     * 根据用户id获取角色信息
     * @param id 用户id
     */
    List<Long> getRoleIdsByUserId(Long id);

    /**
     * 根据用户id 重置密码
     * @param id
     */
    Boolean restPassWordById(Long id);

    /**
     * 根据id删除相关信息
     */
    Boolean deleteUserAllById(String ids);

    /**
     * 获取注册时的邮件验证码
     */
    Integer generateEmailCode(String email);

    /**
     * 验证邮箱账号是否正确
     */
    Boolean verificationEmailCode(String email, String code);

    /**
     * 注册账号
     */
    Integer registerUser(RegisterDTO registerDTO);

    /**
     * 修改密码
     */
    Integer forgetPassword(ForgetPasswordDTO forgetPasswordDTO);
}
